// index.js
const Fortune = require('../../utils/fortune');

Page({
  data: {
    currentDate: '',
    selectedDate: '',
    fortune: null,
    weather: {
      temp: '--',
      text: '未知',
      city: '定位中...',
      humidity: '--',
      windDir: '--',
      windScale: '--'
    }
  },

  onLoad() {
    const now = new Date();
    const dateStr = this.formatDate(now, 'yyyy-MM-dd');
    this.setData({
      selectedDate: dateStr
    });
    this.updateFortune();
    this.getLocation();
  },

  onDateChange(e) {
    const dateStr = e.detail.value;
    this.setData({
      selectedDate: dateStr
    });
    this.updateFortune(new Date(dateStr));
  },

  formatDate(date, fmt) {
    const o = {
      'M+': date.getMonth() + 1,
      'd+': date.getDate(),
      'h+': date.getHours(),
      'm+': date.getMinutes(),
      's+': date.getSeconds(),
      'q+': Math.floor((date.getMonth() + 3) / 3),
      'S': date.getMilliseconds()
    };
    
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    }
    
    for (let k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
      }
    }
    return fmt;
  },

  updateFortune(date) {
    const now = date || new Date();
    const fortune = new Fortune(now);
    const result = fortune.getTodayFortune();
    
    // 使用补零确保月份和日期是两位数
    const month = String(now.getMonth() + 1).padStart(2, '0');
    const day = String(now.getDate()).padStart(2, '0');
    
    this.setData({
      currentDate: `${now.getFullYear()}年${month}月${day}日`,
      fortune: result
    });
  },

  testDatePicker() {
    console.log('=== 开始测试日期选择功能 ===');
    
    // 测试1: 检查默认日期
    const today = new Date();
    const defaultDate = this.formatDate(today, 'yyyy-MM-dd');
    console.log('测试默认日期:', 
      this.data.selectedDate === defaultDate ? '通过' : '失败',
      `期望: ${defaultDate}, 实际: ${this.data.selectedDate}`);
    
    // 测试2: 模拟选择不同日期
    const testDates = [
      '2024-03-20',
      '2024-03-20', // 重复日期，测试一致性
      '2024-03-21',
      '2023-12-31',
      '2025-01-01'
    ];
    
    let lastResult;
    testDates.forEach((dateStr, index) => {
      // 模拟日期选择
      this.onDateChange({ detail: { value: dateStr } });
      
      // 检查日期显示格式
      const date = new Date(dateStr);
      const expectedDisplay = 
        `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
      console.log(`测试日期 ${dateStr} 显示:`,
        this.data.currentDate === expectedDisplay ? '通过' : '失败');
      
      // 检查运势一致性
      if (index === 1) { // 第二次选择同一天
        const currentResult = JSON.stringify(this.data.fortune);
        console.log('测试同一天运势一致性:',
          currentResult === lastResult ? '通过' : '失败');
      }
      
      lastResult = JSON.stringify(this.data.fortune);
    });
    
    console.log('=== 日期选择功能测试完成 ===');
  },

  // 获取位置信息
  getLocation() {
    wx.getLocation({
      type: 'gcj02',
      success: (res) => {
        this.getWeather(res.latitude, res.longitude);
      },
      fail: (err) => {
        console.error('获取位置失败：', err);
        wx.showToast({
          title: '获取位置失败',
          icon: 'none'
        });
      }
    });
  },

  // 获取天气信息
  getWeather(latitude, longitude) {
    // 这里使用和风天气API，你需要注册获取key
    // https://dev.qweather.com/
    const key = '0583eab417af4941965c80361566742f';
    wx.request({
      url: 'https://devapi.qweather.com/v7/weather/now',
      data: {
        key: key,
        location: `${longitude},${latitude}`
      },
      success: (res) => {
        if (res.data.code === '200') {
          const now = res.data.now;
          this.setData({
            'weather.temp': now.temp,
            'weather.text': now.text,
            'weather.humidity': now.humidity,
            'weather.windDir': now.windDir,
            'weather.windScale': now.windScale
          });
          
          // 获取城市名称
          this.getCityName(latitude, longitude);
        }
      },
      fail: (err) => {
        console.error('获取天气失败：', err);
        wx.showToast({
          title: '获取天气失败',
          icon: 'none'
        });
      }
    });
  },

  // 获取城市名称
  getCityName(latitude, longitude) {
    wx.request({
      url: 'https://geoapi.qweather.com/v2/city/lookup',
      data: {
        key: '你的和风天气API密钥',
        location: `${longitude},${latitude}`
      },
      success: (res) => {
        if (res.data.code === '200' && res.data.location && res.data.location[0]) {
          this.setData({
            'weather.city': res.data.location[0].name
          });
        }
      }
    });
  }
});
